草庐IT

Java OutOfMemoryError 奇怪的行为

全部标签

C++ 是否使用放置新的未定义行为两次构造对象?

我遇到了一些令我震惊的代码。本质上它遵循这种模式:classFoo{public://defaultconstructorFoo():x(0),ptr(nullptr){//donothing}//moreinterestingconstructorFoo(FooInitialiser&init):x(0),ptr(nullptr){x=init.getX();ptr=newint;}~Foo(){deleteptr;}private:intx;int*ptr;};voidsomeFunction(FooInitialiserinitialiser){intnumFoos=MAGIC_

c++ - 遍历动态 vector 时 auto 的异常行为

我正在使用自动遍历vector(附加代码)。在遍历的同时,我还在后面附加了一些元素。我没想到会得到这样的输出。#include#includeusingnamespacestd;vectordynamic_vector;voidaccess(){for(autoi:dynamic_vector){if(i==3){dynamic_vector.push_back(4);dynamic_vector.push_back(5);}cout输出:123我原以为从1到5的所有数字都会被打印出来。我无法理解如何使用auto进行遍历? 最佳答案

c++ - 如何在没有未定义行为的情况下安全地偏移位?

考虑到bitset的位数可能少于目标类型,我正在编写一个将bitset转换为int/uint值的函数。这是我写的函数:templatestaticTconvertBitSetToNumber(conststd::bitset&bitset){Tresult;#definetargetSize(sizeof(T)*CHAR_BIT)if(targetSize>count){//ifbitsetis0xF00,convertingitas0x0F00willlosesigninformation(0xF00isnegative,while0x0F00ispositive)//Thisisb

c++ - std::map 和已插入数据的行为

插入新数据时,std::map是否移动已插入的值? 最佳答案 map被实现为一棵树,当你插入一个新元素时,树可能需要重新平衡。这不会使任何迭代器或对树中元素的引用无效。这种平衡是通过指针的操作来完成的,所以你没有什么可担心的;节点本身保持不变。平衡涉及通过重新分配指针告诉节点他们的child、parent和sibling是谁,从而改变树的结构,但这是一个实现细节。从逻辑上讲,一切都没有改变。 关于c++-std::map和已插入数据的行为,我们在StackOverflow上找到一个类似的

c++ - 声明为返回 int 的函数不返回任何内容。这是未定义的行为吗?

这是C++中的有效函数:intf(){if(false){return42;}}以下定义导致UB:intx=f();//returnvalueused问题:下面的表达式语句会导致UB吗?f();非常欢迎从标准中引用。 最佳答案 C++03§6.6.3/2:从一个函数的末尾流出相当于一个没有值的返回;这会导致值返回函数出现未定义的行为。所以这是一个函数本身的UB。顺便说一句,gcc给你一个很好的警告,指向这个UB:Infunction'intf()':Line7:warning:controlreachesendofnon-voidf

c++ - (++i)++ 是未定义的行为吗?

(++i)++是未定义的行为吗?在检索用于后缀增量操作的增量对象之后,前缀增量的副作用是否可能发生?这对我来说似乎很奇怪。我的直觉告诉我这在C++03中未定义,而在C++11中定义明确。我说得对吗? 最佳答案 MygutfeelingsaysthisisundefinedinC++03andwell-definedinC++0x.是的,你是对的。该行为在C++03中未定义,因为您试图在两个序列点之间多次修改i。此行为在C++0x中定义明确,因为(++i)++等同于(i+=1)++。+=运算符的副作用相对于++(后增量)排序,因此行为

c++ - 此代码会产生未定义的行为还是仅仅是未指定的行为?

假设我们有两个编译单元,如下所示://a.cppexternintvalue2;intvalue1=value2+10;//b.cppexternintvalue1;intvalue2=value1+10;当我在VC2010上尝试时,它首先将value1和value2初始化为零。value1和value2不是都动态初始化并且默认初始化不适用于它们吗?谢谢, 最佳答案 3.6.2/1说“具有静态存储持续时间(3.7.1)的对象应在任何其他初始化发生之前进行零初始化(8.5)”。所以你是对的,它们没有被默认初始化。但是它们是零初始化的,

c++ - 如何使 Visual Studio C++ 2010 编译行为像 gcc/g++? (或相反亦然)

假设您有以下简单的main.cpp文件:#include#include#includeusingnamespacestd;intmain(){conststringFILENAME="foo.txt";ifstreamsomefile(FILENAME);populations.close();return0;}这可以通过VisualStudioC++2010正常编译。但是,在基于Linux的系统上,如果我执行makemain并编译,我们会得到一个预期的错误,因为我们没有调用c_str()字符串常量,像这样:ifstreamsomefile(FILENAME.c_str());众所周

c++ - 当第一个 itr 在最后一个之后出现时,std::vector 范围构造函数的官方行为是什么?

假设您有一个有效的起点:std::vectorhost={1,2,3,4,5};当您尝试使用迭代器构造另一个vector时:std::vectorclient(host.begin(),host.end());//client.size()is5.Elementsbegin->endlookjustlikehost.但是如果迭代器是反向的呢?如果开始在结束之后怎么办?std::vectorbackwardsClient(host.end(),host.begin());//Whathappens? 最佳答案 这将是未定义的行为。看标

c++ - 带有返回 const 引用的隐式转换运算符的类的 static_cast<> 行为

我有以下类(class)(精简后只包含相关部分):#includeclassText{private:std::string_text;public:Text(std::string&&text):_text(std::move(text)){}operatorconststd::string&()const{return_text;}};我的问题是:如果我想获得一个conststd::string&,我可以这样做而不会受到任何惩罚吗:Texttext("fred");auto&s=static_cast(text);或者这会构造一个我最终得到引用的中间std::string吗?这种情